package com.zshan.clinic.web.entity.shanghe;

/**
 * 接收上禾身高体重测量数据
 *
 * @author lichen
 */

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import java.util.List;

/**
 * 上禾智能设备——上传请求根对象
 * 对齐《上传数据字段说明》：所有字段按 String 接收，兼容空值与新增字段
 */
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class ShangHeUploadRequest {

    /** 设备机器编码 deviceNo */
    private String deviceNo;

    /** 设备MAC地址 macAddr */
    private String macAddr;

    /** 设备型号 deviceModel */
    private String deviceModel;

    /** 机构编号 unitNo */
    private String unitNo;

    /** 机构名称 unitName */
    private String unitName;

    /**
     * 测量数据列表 datas
     * 协议允许不同设备/配置导致字段缺省，因此单项里所有字段均为 String 且可为空
     */
    @NotEmpty(message = "datas不能为空")
    private List<DataItem> datas;

    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class DataItem {

        // ========== 基础与身份 ==========
        /** 医生工号 doctorID */
        private String doctorID;

        /** 医生名称 doctorName */
        private String doctorName;

        /** 体检编号(14位: yyyyMMddHHmmss；相同编号表示同一次体检) recordNo */
        private String recordNo;

        /** 测量时间 yyyy-MM-dd HH:mm:ss measureTime */
        private String measureTime;

        /** 登录方式：1=身份证;2=手机号;3=社保卡;4=条形码;5=IC卡;0=其他 loginType */
        private String loginType;

        /** 用户ID（身份证号等） userID */
        private String userID;

        /** 姓名 name */
        private String name;

        /** 性别：0=未知;1=男;2=女;9=未说明 sex */
        private String sex;

        /** 年龄（岁） age */
        private String age;

        /** 出生日期（例：2021-01-01） birthday */
        private String birthday;

        /** 地址（社保卡内需已存储） address */
        private String address;

        /** 民族 nation */
        private String nation;

        /** 身份证/社保卡发证时间 startDate */
        private String startDate;

        /** 身份证/社保卡有效时间（部分社保卡没有） endDate */
        private String endDate;

        /** 身份证签发机关（仅身份证） department */
        private String department;

        /**
         * 头像：Base64 图片（不含 data:image/jpeg;base64,）
         * 如解析失败，尝试在最前方补上 data:image/jpeg;base64, 并去除所有换行符 \n
         */
        private String headImg;

        // ========== 身高体重 ==========
        /** 身高 cm height */
        private String height;

        /** 体重 kg weight */
        private String weight;

        /** 体重正常范围（如 65.4-84.7；范围中间为 -；也可能出现 ≥、≤、> 等符号） weight_n */
        private String weight_n;

        /** 体重状态：0=偏低;1=正常;2=偏高;-1=异常；其他类型可明文 weight_s */
        private String weight_s;

        /** BMI 身体质量指数 bmi */
        private String bmi;

        /** BMI 正常范围 bmi_n */
        private String bmi_n;

        /** BMI 状态 bmi_s */
        private String bmi_s;

        // ========== 血压 / 心率 ==========
        /** 收缩压(高压) mmHg sbp */
        private String sbp;

        /** 舒张压(低压) mmHg dbp */
        private String dbp;

        /** 脉搏(心率) 次/分 hr */
        private String hr;

        /** 右臂-收缩压 mmHg sbpR */
        private String sbpR;

        /** 右臂-舒张压 mmHg dbpR */
        private String dbpR;

        /** 右臂-脉搏(心率) 次/分 hrR */
        private String hrR;

        /** 动脉脉搏波速率指数 avi */
        private String avi;

        /** 动脉压力容积指数 api */
        private String api;

        // ========== 人体成分 ==========
        /** 体脂肪率 % fatRate */
        private String fatRate;

        /** 体水分率 % waterRate */
        private String waterRate;

        /** 体肌肉率 % muscleRate */
        private String muscleRate;

        /** 皮下脂肪率 % fatSubCutRate */
        private String fatSubCutRate;

        /** 内脏脂肪指数 vfal */
        private String vfal;

        /** 基础代谢量 kcal bmr */
        private String bmr;

        /** 去脂体重 kg fatFree */
        private String fatFree;

        /** 骨量 kg bone */
        private String bone;

        /** 无机盐量 kg mineral */
        private String mineral;

        /** 蛋白质量 kg protein */
        private String protein;

        /** 细胞内水分 L waterICW */
        private String waterICW;

        /** 细胞外水分 L waterECW */
        private String waterECW;

        /** 标准体重 kg weAdjus */
        private String weAdjus;

        /** 调整脂肪量 kg faAdjus */
        private String faAdjus;

        /** 调整肌肉量 kg muAdjus */
        private String muAdjus;

        /** 身体年龄 bodyAge */
        private String bodyAge;

        /** 身体得分 bodyScore */
        private String bodyScore;

        /** 骨骼肌（若设备上传） skeletalMuscle */
        private String skeletalMuscle;

        /** 脂肪量（若设备上传） fat */
        private String fat;

        /** 体型（如：偏瘦/标准/偏胖…） bodyShape */
        private String bodyShape;

        /** 躯干脂肪量/率（若上传） fatTrunk */
        private String fatTrunk;

        /** 左腿脂肪量/率（若上传） fatLeftLeg */
        private String fatLeftLeg;

        /** 右腿脂肪量/率（若上传） fatRightLeg */
        private String fatRightLeg;

        /** 左臂脂肪量/率（若上传） fatLeftArm */
        private String fatLeftArm;

        /** 右臂脂肪量/率（若上传） fatRightArm */
        private String fatRightArm;

        /** 躯干肌肉量/率（若上传） muscleTrunk */
        private String muscleTrunk;

        /** 左腿肌肉量/率（若上传） muscleLeftLeg */
        private String muscleLeftLeg;

        /** 右腿肌肉量/率（若上传） muscleRightLeg */
        private String muscleRightLeg;

        /** 左臂肌肉量/率（若上传） muscleLeftArm */
        private String muscleLeftArm;

        /** 右臂肌肉量/率（若上传） muscleRightArm */
        private String muscleRightArm;

        /** 每日建议能量摄入 DCI（若上传） dci */
        private String dci;

        /** 建议运动-步行（若上传） walking */
        private String walking;

        /** 建议运动-游泳（若上传） swim */
        private String swim;

        /** 建议运动-有氧（若上传） aerobic */
        private String aerobic;

        /** 建议运动-慢跑（若上传） jogging */
        private String jogging;
        // ========== 体温 / 血氧 ==========
        /** 测温类型（耳温/额温等，若设备上传） teType */
        private String teType;

        /** 体温 temp */
        private String temp;

        /** 温度单位（如 ℃） teDw */
        private String teDw;

        /** 血氧饱和度 % xy */
        private String xy;

        /** 脉率 bpm（血氧仪） */
        private String bpm;

        // ========== 血糖 / 尿酸 / 胆固醇 / 血红蛋白 / 腰臀比 ==========
        /** 血糖 glu（采血时段类型见 gluType） */
        private String glu;

        /** 血糖类型/采血时段（空腹/餐后等） gluType */
        private String gluType;

        /** 尿酸 ua */
        private String ua;

        /** 总胆固醇 chol */
        private String chol;

        /** 血红蛋白 hb */
        private String hb;

        /** 腰围 cm waist */
        private String waist;

        /** 臀围 cm hips */
        private String hips;

        /** 腰臀比 whr */
        private String whr;
        // ========== 尿液分析 ==========
        /** 白细胞 leu */
        private String leu;

        /** 潜血 bld */
        private String bld;

        /** 酸碱度 pH */
        private String ph;

        /** 蛋白 pro */
        private String pro;

        /** 尿胆原 ubg */
        private String ubg;

        /** 亚硝酸盐 nit */
        private String nit;

        /** 维生素C vc */
        private String vc;

        /** 尿糖（尿检） gluN */
        private String gluN;

        /** 胆红素 bil */
        private String bil;

        /** 酮体 ket */
        private String ket;

        /** 比重 sg */
        private String sg;

        /** 肌酐 cre */
        private String cre;

        /** 钙 ca */
        private String ca;

        /** 微量白蛋白 ma */
        private String ma;
        // ========== 中医体质 / 心电 ==========
        /** 中医体质（如：倾向气郁质） zytz */
        private String zytz;

        /** 心电-心率 ecghr */
        private String ecghr;

        /** 心电-P波时限 ecgp */
        private String ecgp;

        /** 心电-PR间期 ecgpr */
        private String ecgpr;

        /** 心电-QRS时限 ecgqrs */
        private String ecgqrs;

        /** 心电-QT间期 ecgqt */
        private String ecgqt;

        /** 心电-QTc（校正QT） ecgqtc */
        private String ecgqtc;

        /** 心电-P波电轴 ecgpa */
        private String ecgpa;

        /** 心电-QRS电轴 ecgqrsa */
        private String ecgqrsa;

        /** 心电-T波电轴 ecgta */
        private String ecgta;

        /** 心电-RV5电压 ecgrv5 */
        private String ecgrv5;

        /** 心电-SV1电压 ecgsv1 */
        private String ecgsv1;

        /** 心电-RV5+SV1 电压和 ecgrv5sv1 */
        private String ecgrv5sv1;

        /** 心电-结论（明文，如：窦性心律） ecgresult */
        private String ecgresult;

        /** 心电图图片 Base64（同头像规则） ecgImg */
        private String ecgImg;
        // ========== 血脂四项 / 糖化 ==========
        /** 总胆固醇（血脂模块） chol4 */
        private String chol4;

        /** 高密度脂蛋白 HDL */
        private String hdl;

        /** 低密度脂蛋白 LDL */
        private String ldl;

        /** 甘油三酯 trig */
        private String trig;

        /** 糖化血红蛋白 thxhdb */
        private String thxhdb;
        // ========== 骨密度 ==========
        /** 骨密度-骨骼年龄 bodyAgeG */
        private String bodyAgeG;

        /** 骨密度-月份 bodyMonth */
        private String bodyMonth;

        /** Z评分 zscore */
        private String zscore;

        /** Z评分比率 zratio */
        private String zratio;

        /** 结论说明 com */
        private String com;

        /** T评分 tscore */
        private String tscore;

        /** T评分比率 tratio */
        private String tratio;

        /** 骨质量指数 BQI bqi */
        private String bqi;

        /** 骨折风险 RRF rrf */
        private String rrf;

        /** 预计骨龄 eoa（文档示例字段名 eoa） */
        private String eoa;

        /** 预测身高(20岁以下) pheight */
        private String pheight;
        // ========== 肺活量 ==========
        /** PEF 呼吸气流峰值 L/min pef */
        private String pef;

        /** PEF%（PEF实际/预计*100） pefx */
        private String pefx;

        /** FEV1 第一秒用力呼气量 L fev1 */
        private String fev1;

        /** FEV1%（实际/预计*100） fev1x */
        private String fev1x;

        /** FVC 用力肺活量 L fvc */
        private String fvc;

        /** FEV1/FVC % fvcx */
        private String fvcx;

        // ========== 酒精含量 ==========
        /** 酒精含量（mg/100ml；示例 0 或 1） jiu */
        private String jiu;

        // ========== 视力 ==========
        /** 左眼视力 eleft */
        private String eleft;

        /** 右眼视力 eright */
        private String eright;

        /** 左眼散光 lleft */
        private String lleft;

        /** 右眼散光 lright */
        private String lright;

        /**
         * 色盲可能性 %（0 正常；0-100 为可能性百分比，如 20） color
         * 注：文档示例里也出现“404 正常”之类明文
         */
        private String color;

        // ========== 心理（SDS） ==========
        /**
         * SDS 抑郁自评量表标准总分（越小越好）
         * 53以下：正常；53-62：轻度；63-72：中度；>72：重度
         */
        private String sds;
    }
}
